import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;

/**
 * Permet d'acceder au description de la Flore.
 */
public class Flore extends JFrame implements MouseListener, ActionListener {

	
	private JPanel panelRetour = new JPanel();   
	private JButton boutonRetour = new JButton(new ImageIcon("img/Galerie/BoutonRetour.png"));
	private JPanel panelSuivant = new JPanel();   
	private JButton boutonSuivant = new JButton(new ImageIcon("img/Galerie/BoutonSuivant.png"));
	
	private int i= 0 ;
	private String tableau[] = {"img/Galerie/Flore1.png","img/Galerie/Flore2.png","img/Galerie/Flore3.png"} ;
	private BufferedImage img1;
    private int hauteurEnvironnement=768;
    private int largeurEnvironnement=1024;
    public Predateur predateur;
	private Dimension dimensionFenetrePrincipale = new Dimension(1024, 768);
    private JLayeredPane ensemble = new JLayeredPane();
    
/**
 * Generation de la fenetre de Flore, les etapes sont :
 * 
 * <li>Creation de nos boutons retour et suivant</li>
 * <li>lancement d'un Thread 'threadPrincipal' qui toutes les 50 millisecondes repaint les elements graphiques</li>
 * <li>modification de la fenetre princaple selon les criteres voulus</li>
 * 
 * 
 */	
	public Flore(){
    	boutonRetour.setBorderPainted(false);		
    	boutonRetour.setOpaque(false);
    	boutonRetour.setContentAreaFilled(false);
    	boutonRetour.addActionListener(this);
    	boutonRetour.setToolTipText("Retour");		//affichage de texte pour le bouton
		panelRetour.setBounds(100 ,600, 250, 100);
		panelRetour.setOpaque(false);
		panelRetour.add(boutonRetour);
		ensemble.add(panelRetour, new Integer(3));
		
		boutonSuivant.setBorderPainted(false);
    	boutonSuivant.setOpaque(false);
    	boutonSuivant.setContentAreaFilled(false);
    	boutonSuivant.addActionListener(this);
    	boutonSuivant.setToolTipText("Suivant");	//affichage de texte pour le bouton
		panelSuivant.setBounds(628 ,600, 250, 100);
		panelSuivant.setOpaque(false);
		panelSuivant.add(boutonSuivant);
		ensemble.add(panelSuivant, new Integer(3));


        final JPanel fond;
      	fond = new JPanel(){
            @Override
            protected void paintComponent(Graphics g) {
                  super.paintComponent(g);
                 

                  // affichage du mod�le du jeu
                  try {
					Thread.sleep(50);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
                  affichage(g,i);
            }
      };
   
      	
    	fond.setBackground(new Color(100,100,100)); 
		fond.setBounds(0, 0, 1024, 768);
		fond.addMouseListener(this);

		ensemble.add(fond, new Integer(2));
		
		Thread threadPrincipal = new Thread(new Runnable() {
            @Override
            public void run() {
                  while (true) { // boucle infinie   
        
                	// temporisation
                      try {
                            Thread.sleep(50);
                      } catch (InterruptedException e) {
                            //
                      }
                  }
            }
		});
		// lancer le thread
		threadPrincipal.start();
			    
		setContentPane(ensemble);
		this.setUndecorated(true);

    	this.setPreferredSize(dimensionFenetrePrincipale);
    	this.setResizable(false);
    	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.pack();
		this.setLocationRelativeTo(null);
		this.setVisible(true);	

}

	/**
	 * Permet l'affichage d'une image 
	 * 
	 * @param g
	 * 			objets graphics
	 * @param i
	 * 			i est l'index de l'image a recuperer dans le tableau pour faire l'affichage par la suite
	 */
	
	public void affichage(Graphics g,int i) {
		try {
        	img1 = ImageIO.read(new File(tableau[i]));
        } catch (IOException e) {
                        e.printStackTrace();
        }
            g.drawImage(img1,0,0,null);
		
	}
	
	/**
	 * augmentation de 1 pour la valeur i qui est l'index  du tableau contenant l'adresse des images a afficher
	 * 
	 */
	
	public void imageSuivante(){
		if (i<(tableau.length)-1){
		this.i=i+1;}
	}
	/**
	 * soustraction de 1 pour la valeur i qui est l'index  du tableau contenant l'adresse des images a afficher
	 * 
	 */
	public void imagePrecedente(){
		
		this.i=i-1;
		if (i==-1){
			this.setVisible(false);
		}
		
		
	}

	
	/**
	 * Gestion des interactions avec les boutons
	 */
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if (e.getSource()==boutonSuivant){
	        this.imageSuivante();
	  	}

		if (e.getSource()==boutonRetour){
	        this.imagePrecedente();
	  	}
	}

	/**
	 * gestion de notre souris dans Flore
	 */
	
	@Override
	public void mouseClicked(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseEntered(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseReleased(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}
}
